#!/bin/bash

# 检查是否为root用户
if [ "$(id -u)" -eq 0 ]; then
    echo "警告：此脚本设计为非root用户运行。虽然可以运行，但建议普通用户执行。"
fi

# 检查系统是否为Debian系
if ! grep -q "ID=debian\|ID=ubuntu" /etc/os-release; then
    echo "错误：此脚本仅适用于Debian系系统。"
    exit 1
fi

# 检查是否安装了grub
if ! command -v update-grub &> /dev/null || ! [ -d /boot/grub ]; then
    echo "错误：系统似乎未安装GRUB引导加载程序。"
    exit 1
fi

# 获取已安装的内核列表
echo "检测已安装的内核..."
kernels=$(dpkg -l | grep -E 'linux-image-[0-9]+' | awk '{print $2}' | sed 's/linux-image-//' | sort -V)

if [ -z "$kernels" ]; then
    echo "错误：未检测到已安装的内核。"
    exit 1
fi

echo "已安装的内核版本："
select kernel in $kernels "退出"; do
    if [ "$kernel" = "退出" ]; then
        exit 0
    fi
    
    if [ -n "$kernel" ]; then
        break
    else
        echo "无效选择，请重新输入。"
    fi
done

# 验证选择的内核是否确实存在
if ! echo "$kernels" | grep -q "^${kernel}$"; then
    echo "错误：选择的内核版本不存在。"
    exit 1
fi

# 获取当前默认内核（需要sudo权限）
current_default=""
if [ -f /boot/grub/grub.cfg ]; then
    current_default=$(grep -A10 "menuentry '" /boot/grub/grub.cfg | grep -B10 "submenu '" | grep -A1 "menuentry '" | grep -v "submenu '" | head -n 1 | awk -F"'" '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//')
fi

# 显示当前设置
echo ""
echo "当前默认内核: ${current_default:-无法检测（可能需要sudo权限）}"
echo "您选择的内核: $kernel"
echo ""

# 生成新的grub配置命令
grub_update_cmd="sudo update-grub && sudo grub-set-default 'Advanced options for Debian GNU/Linux>$kernel'"

# 显示说明
echo "要以 $kernel 作为默认启动内核，请执行以下命令："
echo ""
echo "1. 首先确认该内核已安装在/boot目录："
echo "   ls /boot/vmlinuz-* | grep $kernel"
echo ""
echo "2. 然后运行以下命令更新GRUB并设置默认内核："
echo "   $grub_update_cmd"
echo ""
echo "或者，您可以复制以下命令一次性执行（需要输入sudo密码）："
echo "   sudo bash -c \"update-grub && grub-set-default 'Advanced options for Debian GNU/Linux>$kernel'\""
echo ""

# 验证函数
verify_default_kernel() {
    echo ""
    echo "验证默认内核设置..."
    
    if [ -z "$(command -v grub-editenv)" ]; then
        echo "警告：grub-editenv不可用，无法完全验证设置。"
        echo "请重启系统后使用以下命令验证："
        echo "   uname -r"
        return
    fi
    
    saved_default=$(sudo grub-editenv list | grep saved_entry | cut -d= -f2-)
    if [ -n "$saved_default" ]; then
        echo "GRUB记录的默认启动项: $saved_default"
        if echo "$saved_default" | grep -q "$kernel"; then
            echo "验证成功：默认内核已设置为包含 $kernel 的条目"
        else
            echo "警告：设置的默认内核与选择的不完全匹配"
        fi
    else
        echo "警告：无法获取GRUB保存的默认启动项"
    fi
    
    echo ""
    echo "建议重启系统后运行以下命令验证实际使用的内核："
    echo "   uname -r"
}

# 询问用户是否要验证
read -p "是否要尝试验证当前默认内核设置？(y/n) " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
    verify_default_kernel
fi

echo ""
echo "脚本完成。要使更改生效，请按照说明执行命令并重启系统。"